/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package palitosocket;

import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.HashMap;
import java.util.Scanner;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * @author mayra
 * @author raiene
 * @author tatiane
 */

public class MainCliente {

    private Socket socket;
    private String hostServidor;
    private ObjectOutputStream saida;
    private ObjectInputStream entrada;
    private HashMap<String, String> dadosEntrada = new HashMap<String, String>();
    private HashMap<String, String> dadosSaida = new HashMap<String, String>();
    private Scanner teclado = new Scanner(System.in);
    private boolean inicioJogo = false;
    private String nome;

    /**
     * @param args the command line arguments
     */

    //classe principal
    public static void main(String[] args) {
        MainCliente aplicativo = new MainCliente();
    }
    private void menu(){
        System.out.println("Menu \n1 - Ver menu novamente \n2 - Iniciar jogo \n3 - Sair");
    }

    private int iniciarJogo() throws IOException, ClassNotFoundException{
        dadosSaida.put("pegarJogadores", "");
        saida.writeObject(dadosSaida);
        dadosEntrada = (HashMap<String, String>) entrada.readObject();
        System.out.println("funcao init game "+dadosEntrada);
        dadosEntrada.clear();
        return 1;
    }
    public MainCliente() {
        try {
            //mensagem para o cliente que solicita o endereço do servidor
            System.out.println("Insira o endereço do servidor: ");
            //captura o endereço digitado
            hostServidor = teclado.nextLine();
            /*
             *instancia um objeto do tipo socket passando por
             *parâmetro o endereço e a porta do servidor  
             *
             */
            socket = new Socket(hostServidor, 2222);
            //instancia um objeto de saida a partir do socket
            saida = new ObjectOutputStream(socket.getOutputStream());
            //instancia um objeto de entrada a partir do socket
            entrada = new ObjectInputStream(socket.getInputStream());
            //mensagem para o cliente que solicita o nome
            System.out.println("Insira o seu nome");
            //captura o nome digitado
            nome = teclado.nextLine();
            
            //loop realizado enquanto a condição for verdadeira
            while (true) {
                try { //tente as seguintes operações
                    //lê os objetos a partir da entrada
                    dadosEntrada = (HashMap<String, String>) entrada.readObject();
                    /*
                     * verifica se a mensagem retornada é diferente de vazio,
                     * se for mostra a mensagem
                     * */
                    if (!" ".equals(dadosEntrada.get("mensagem"))) {
                        System.out.println(dadosEntrada.get("mensagem"));
                    }
               
                    //if que verifica o inicio do jogo
                    if (inicioJogo == true) {
                        //seta em uma string o tipo de aposta capturada em dadosEntrada
                        String tipoAposta = dadosEntrada.get("tipoAposta");
                       
                        
                        //se o tipo de aposta for palito
                        if ("palito".equals(tipoAposta)) {
                            //instancia novo dicionario de dados de saída
                            dadosSaida = new HashMap<String, String>();
                            //mensagem ao cliente para que insira o numero de palitos
                            System.out.println("Insira número de palitos: ");
                            /**
                             * seta com a chave apostaPalito forçando para inteiro o q foi lido
                             * do teclado
                             */
                            dadosSaida.put("apostaPalito", Integer.toString(teclado.nextInt()));
                            //seta com a chave nome o nome do cliente
                            dadosSaida.put("nome", nome);

                        } else if ("mesa".equals(tipoAposta)) {
                            /**
                             * Se o tipo de aposta for mesa
                             *
                             */
                            //inicializa a variavel valor com 0
                            int valor = 0;
                            //repete
                               //instancia novo dicionario de dados de saída
                                dadosSaida = new HashMap<String, String>();
                                //mensagem ao cliente para que insira a sua aposta
                                System.out.println("Insira sua aposta da mesa: ");
                                //captura o valor digitado
                                valor = teclado.nextInt();

                            /**
                             * seta com a chave apostaMesa forçando para inteiro o q foi lido
                             * do teclado
                             */
                            dadosSaida.put("apostaMesa", Integer.toString(valor));
                            //seta com a chave nome o nome do cliente
                            dadosSaida.put("nome", nome);

                        } else if ("resultado".equals(tipoAposta)) {
                            /**
                             * Se o tipo de aposta for resultado
                             *
                             */
                             //instancia novo dicionario de dados de saída
                            dadosSaida = new HashMap<String, String>();
                            //seta com a chave apostaMesa a string vazia
                            dadosSaida.put("apostaMesa", " ");
                            //seta com a chave nome o nome do cliente
                            dadosSaida.put("nome", nome);
                        }

                    }
                    //seta com a chave nome o nome do cliente
                    dadosSaida.put("nome", nome);
                    //escreve na saída o dicionario de dados
                    saida.writeObject(dadosSaida);
                    //limpa a variavel saida
                    saida.flush();
                    inicioJogo = true;


                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
                }

            }

        } catch (UnknownHostException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }

    }
}
